package com.xlw.ui.activity;

import android.accounts.Account;
import android.accounts.AccountManager;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;

import com.xlw.authenticator.AuthenticatorActivity;
import com.xlw.onroad.R;

public class BootstrapActivity extends ActionBarActivity {

    private static final int NEW_ACCOUNT = 0;
    private static final int EXISTING_ACCOUNT = 1;
    private AccountManager mAccountManager;

    /*
    这个类实现登录功能.登录功能会在以下情况下用到:
    1. 应用程序启动时还没有账户信息被创建
    2. 用户在"账户&同步"菜单中点击"新建账户"
    3. 同步适配器尝试同步数据时出现身份验证错误
    这个类的目的是为了处理第一种情况.

    在onCreate()方法中,根据类型获取账户列表.如果没有账户,就启动AuthenticatorActivity创建新账户;如果已经有
    账户存在,但是AccountManager并没有查询到该账户对应的密码,就需要用户输入密码,当密码失效时会发生上述情况.
    一切准备就绪后,就可以切换到MainActivity
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bootstrap);

        mAccountManager = AccountManager.get(this);
        // 根据类型获取账户列表
        Account[] accounts = mAccountManager.getAccountsByType(AuthenticatorActivity.PARAM_ACCOUNT_TYPE);
        if(accounts.length == 0){
            // 创建新账户
            final Intent intent = new Intent(this,AuthenticatorActivity.class);
            /*
            设置下面这个标志，将在Task的Activity stack中设置一个还原点，当Task恢复时，需要清理Activity。
            也就是说，下一次Task带着 FLAG_ACTIVITY_RESET_TASK_IF_NEEDED标记进入前台时（典型的操作是用户在主画面重启它），
            这个Activity和它之上的都将关闭，以至于用户不能再返回到它们，但是可以回到之前的Activity。
            */
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
            startActivityForResult(intent,NEW_ACCOUNT);
        }else{
            // 要求用户输入密码
            String password = mAccountManager.getPassword(accounts[0]);
            // 如果账户存在,但是AccountManager并没有查询到该账户对应的密码
            if(password == null){
                // 需要用户输入密码
                final Intent intent = new Intent(this,AuthenticatorActivity.class);
                intent.putExtra(AuthenticatorActivity.PARAM_USER,accounts[0].name);
                startActivityForResult(intent,EXISTING_ACCOUNT);
            }else{
                // 切换到MainActivity
                startActivity(new Intent(this,MainActivity.class));
                finish();
            }
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_bootstrap, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}
